package com.gxc.array;

/**
 * LCP 61. 气温变化趋势
 * 力扣城计划在两地设立「力扣嘉年华」的分会场，气象小组正在分析两地区的气温变化趋势，对于第 i ~ (i+1) 天的气温变化趋势，将根据以下规则判断：
 *
 * 若第 i+1 天的气温 高于 第 i 天，为 上升 趋势
 * 若第 i+1 天的气温 等于 第 i 天，为 平稳 趋势
 * 若第 i+1 天的气温 低于 第 i 天，为 下降 趋势
 * 已知 temperatureA[i] 和 temperatureB[i] 分别表示第 i 天两地区的气温。
 * 组委会希望找到一段天数尽可能多，且两地气温变化趋势相同的时间举办嘉年华活动。
 * 请分析并返回两地气温变化趋势相同的最大连续天数
 */
public class TemperatureTrend {

    public static void main(String[] args) {
        int[] temperatureA = {21,18,18,18,31};
        int[] temperatureB = {34,32,16,16,17};

        System.out.println(handle(temperatureA, temperatureB));
    }

    /**
     * 一次循环先计算温度升降
     * @param temperatureA
     * @param temperatureB
     * @return
     */
    private static int handle(int[] temperatureA, int[] temperatureB) {
        //不使用额外空间
        for (int i = 0; i < temperatureA.length-1; i++) {
            if (i+1 <temperatureA.length) {

                if ( temperatureA[i] > temperatureA[i+1]) {
                    temperatureA[i] = -1;
                    //降温
                } else if ( temperatureA[i] < temperatureA[i+1]) {
                    //升温
                    temperatureA[i] = 1;
                } else {
                    //平稳
                    temperatureA[i] = 0;
                }
            }

        }
        for (int i = 0; i < temperatureB.length-1; i++) {
            if (i+1 <temperatureB.length) {

                if ( temperatureB[i] > temperatureB[i+1]) {
                    temperatureB[i] = -1;
                    //降温
                } else if ( temperatureB[i] < temperatureB[i+1]) {
                    //升温
                    temperatureB[i] = 1;
                } else {
                    //平稳
                    temperatureB[i] = 0;
                }
            }

        }

        int length = Math.max(temperatureA.length, temperatureB.length);
        int max = 0;
        int res = 0;
        //过滤最后一天
        for (int i = 0; i < length-1; i++) {
            if (temperatureA[i] == temperatureB[i]) {
                res++;
            } else {
                max = Math.max(res, max);
                //重置回0
                res = 0;
            }
        }
        max = Math.max(res, max);
        return max;
    }

    class Solution {
        public int temperatureTrend(int[] temperatureA, int[] temperatureB) {
            int n = temperatureA.length;
            int ans = 0, cur = 0;
            for (int i = 1; i < n; ++i) {
                int ta = getTrend(temperatureA[i - 1], temperatureA[i]);
                int tb = getTrend(temperatureB[i - 1], temperatureB[i]);
                if (ta == tb) {
                    ++cur;
                    ans = Math.max(ans, cur);
                } else {
                    cur = 0;
                }
            }
            return ans;
        }

        public int getTrend(int x, int y) {
            if (x == y) {
                return 0;
            }
            return x < y ? -1 : 1;
        }
    }

}
